﻿//начало текста модуля

///////////////////////////////////////////////////
//Служебная часть
///////////////////////////////////////////////////

&НаКлиенте
// контекст фреймворка Vanessa-Behavior
Перем Ванесса;
 
&НаКлиенте
// Структура, в которой хранится состояние сценария между выполнением шагов. Очищается перед выполнением каждого сценария.
Перем Контекст Экспорт;
 
&НаКлиенте
// Структура, в которой можно хранить служебные данные между запусками сценариев. Существует, пока открыта форма Vanessa-Behavior.
Перем КонтекстСохраняемый Экспорт;

&НаКлиенте
// Служебная функция.
Функция ДобавитьШагВМассивТестов(МассивТестов,Снипет,ИмяПроцедуры,ПредставлениеТеста = Неопределено,Транзакция = Неопределено,Параметр = Неопределено)
	Структура = Новый Структура;
	Структура.Вставить("Снипет",Снипет);
	Структура.Вставить("ИмяПроцедуры",ИмяПроцедуры);
	Структура.Вставить("ИмяПроцедуры",ИмяПроцедуры);
	Структура.Вставить("ПредставлениеТеста",ПредставлениеТеста);
	Структура.Вставить("Транзакция",Транзакция);
	Структура.Вставить("Параметр",Параметр);
	МассивТестов.Добавить(Структура);
КонецФункции

&НаКлиенте
// Функция экспортирует список шагов, которые реализованы в данной внешней обработке.
Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт
	Ванесса = КонтекстФреймворкаBDD;
	
	ВсеТесты = Новый Массив;

	//описание параметров
	//ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,Транзакция,Параметр);

	ДобавитьШагВМассивТестов(ВсеТесты,"ВДеревеЗагруженнойФичиБудетГруппа(Парам01)","ВДеревеЗагруженнойФичиБудетГруппа","Тогда в дереве загруженной фичи будет группа ""ПерваяГруппа""");
	ДобавитьШагВМассивТестов(ВсеТесты,"ВДеревеЗагруженнойФичиВнутриГруппыБудетГруппа(Парам01,Парам02)","ВДеревеЗагруженнойФичиВнутриГруппыБудетГруппа","И     в дереве загруженной фичи внутри группы ""ПерваяГруппа"" будет группа ""ТретьяГруппа""");
	ДобавитьШагВМассивТестов(ВсеТесты,"ВДеревеЗагруженнойФичиШагБудетВнутриГруппы(Парам01,Парам02)","ВДеревеЗагруженнойФичиШагБудетВнутриГруппы","И     в дереве загруженной фичи шаг ""Первый шаг фичи Проверка работы областей в дереве"" будет внутри группы ""ПерваяГруппа""");

	Возврат ВсеТесты;
КонецФункции
	
&НаСервере
// Служебная функция.
Функция ПолучитьМакетСервер(ИмяМакета)
	ОбъектСервер = РеквизитФормыВЗначение("Объект");
	Возврат ОбъектСервер.ПолучитьМакет(ИмяМакета);
КонецФункции
	
&НаКлиенте
// Служебная функция для подключения библиотеки создания fixtures.
Функция ПолучитьМакетОбработки(ИмяМакета) Экспорт
	Возврат ПолучитьМакетСервер(ИмяМакета);
КонецФункции



///////////////////////////////////////////////////
//Работа со сценариями
///////////////////////////////////////////////////

&НаКлиенте
// Процедура выполняется перед началом каждого сценария
Процедура ПередНачаломСценария() Экспорт
	
КонецПроцедуры

&НаКлиенте
// Процедура выполняется перед окончанием каждого сценария
Процедура ПередОкончаниемСценария() Экспорт
	//безусловное закрытие формы если она осталась
	Попытка
	    ОткрытаяФормаVanessaBehavoir = Контекст.ОткрытаяФормаVanessaBehavoir;
		ОткрытаяФормаVanessaBehavoir.Закрыть();
	Исключение
	
	КонецПопытки;
КонецПроцедуры



///////////////////////////////////////////////////
//Реализация шагов
///////////////////////////////////////////////////

&НаКлиенте
Процедура НайтиЭлементВДереве(ДеревоСтроки,ИмяОбласти,ЕстьЭлемент)
	Если ЕстьЭлемент Тогда
		Возврат;
	КонецЕсли;	 
	
	Для каждого СтрокаДерева Из ДеревоСтроки Цикл
		Если СтрокаДерева.Имя = ИмяОбласти Тогда
			ЕстьЭлемент = Истина;
			Возврат;
		КонецЕсли;	 
		
		НайтиЭлементВДереве(СтрокаДерева.ПолучитьЭлементы(),ИмяОбласти,ЕстьЭлемент);
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
//Тогда в дереве загруженной фичи будет группа "ПерваяГруппа"
//@ВДеревеЗагруженнойФичиБудетГруппа(Парам01)
Процедура ВДеревеЗагруженнойФичиБудетГруппа(ИмяОбласти) Экспорт
	ДеревоТестов  = Контекст.ОткрытаяФормаVanessaBehavoir.Объект.ДеревоТестов;
	
	ЕстьЭлемент = Ложь;
	НайтиЭлементВДереве(ДеревоТестов.ПолучитьЭлементы(),ИмяОбласти,ЕстьЭлемент);
	Ванесса.ПроверитьРавенство(ЕстьЭлемент,Истина,"Нашли в дереве область " + ИмяОбласти);
КонецПроцедуры


&НаКлиенте
Процедура НайтиСтрокуДереваПоИмени(ДеревоСтроки,ИмяОбласти,ИскомаяСтрока);
	Если ИскомаяСтрока <> Неопределено Тогда
		Возврат;
	КонецЕсли;	 
	
	Для каждого СтрокаДерева Из ДеревоСтроки Цикл
		Если СтрокаДерева.Имя = ИмяОбласти Тогда
			ИскомаяСтрока = СтрокаДерева;
			Возврат;
		КонецЕсли;	 
		
		НайтиСтрокуДереваПоИмени(СтрокаДерева.ПолучитьЭлементы(),ИмяОбласти,ИскомаяСтрока);
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
//И     в дереве загруженной фичи внутри группы "ПерваяГруппа" будет группа "ТретьяГруппа"
//@ВДеревеЗагруженнойФичиВнутриГруппыБудетГруппа(Парам01,Парам02)
Процедура ВДеревеЗагруженнойФичиВнутриГруппыБудетГруппа(ИмяОбласти1,ИмяОбласти2) Экспорт
	ДеревоТестов  = Контекст.ОткрытаяФормаVanessaBehavoir.Объект.ДеревоТестов;
	
	ИскомаяСтрока = Неопределено;
	НайтиСтрокуДереваПоИмени(ДеревоТестов.ПолучитьЭлементы(),ИмяОбласти2,ИскомаяСтрока);
	Ванесса.ПроверитьНеРавенство(ИскомаяСтрока,Неопределено,"Нашли в дереве область " + ИмяОбласти2);
	
	Ванесса.ПроверитьРавенство(ИскомаяСтрока.ПолучитьРодителя().Имя,ИмяОбласти1,"" + ИмяОбласти2 + " находится внутри " + ИмяОбласти1);
КонецПроцедуры


&НаКлиенте
//И     в дереве загруженной фичи шаг "Первый шаг фичи Проверка работы областей в дереве" будет внутри группы "ПерваяГруппа"
//@ВДеревеЗагруженнойФичиШагБудетВнутриГруппы(Парам01,Парам02)
Процедура ВДеревеЗагруженнойФичиШагБудетВнутриГруппы(Строка1,Строка2) Экспорт
	ДеревоТестов  = Контекст.ОткрытаяФормаVanessaBehavoir.Объект.ДеревоТестов;
	
	ИскомаяСтрока = Неопределено;
	НайтиСтрокуДереваПоИмени(ДеревоТестов.ПолучитьЭлементы(),Строка1,ИскомаяСтрока);
	Ванесса.ПроверитьНеРавенство(ИскомаяСтрока,Неопределено,"Нашли в дереве область <" + Строка1 + ">");
	
	Ванесса.ПроверитьРавенство(ИскомаяСтрока.ПолучитьРодителя().Имя,Строка2,"" + Строка1 + " находится внутри " + Строка2);
КонецПроцедуры

//окончание текста модуля  
//окончание текста модуля